//
//  NSObject+CreateControls.h
//  高仿暴走斗图
//
//  Created by huangsongyao on 16/3/7.
//  Copyright © 2016年 huangsongyao. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSObject (CreateControls)


/**
 *  创建button对象
 *
 *  @param image          Nor背景图片名字
 *  @param imageHighlight Pre背景图片名字
 *  @param title          title
 *  @param titleHighlight hTitle
 *
 *  @return UIButton对象
 */
+ (UIButton *)createButtonBackgroudImage:(NSString *)image
                          imageHighlight:(NSString *)imageHighlight
                                   title:(NSString *)title
                          titleHighlight:(NSString *)titleHighlight;

/**
 *  创建button对象
 *
 *  @param image  Nor背景图，UIImage对象
 *  @param hImage Pre背景图，UIImage对象
 *  @param title  title
 *  @param hTitle hTitle
 *
 *  @return UIButton对象
 */
+ (UIButton *)createButtonBGImage:(UIImage *)image
                           hImage:(UIImage *)hImage
                            title:(NSString *)title
                           hTitle:(NSString *)hTitle;


/**
 *  创建button对象
 *
 *  @param targer button的targer方法
 *  @param image  Nor背景图，UIImage对象
 *  @param hImage Pre背景图，UIImage对象
 *  @param title  title
 *  @param hTitle hTitle
 *
 *  @return UIButton对象
 */
+ (UIButton *)createButtonTarger:(SEL)targer
                           image:(UIImage *)image
                          hImage:(UIImage *)hImage
                           title:(NSString *)title
                          hTitle:(NSString *)hTitle;

/**
 *  创建imageView对象
 *
 *  @param image         Nor image，图片名称
 *  @param highImage     高亮 image，图片名称
 *  @param clipsToBounds 剪裁，BOOL
 *  @param vcModel       UIViewContentMode
 *
 *  @return UIImageView对象
 */
+ (UIImageView *)createImageView:(NSString *)image
                       highImage:(NSString *)highImage
                   clipsToBounds:(BOOL)clipsToBounds
                         vcModel:(UIViewContentMode)vcModel;

/**
 *  创建imageView对象
 *
 *  @param image         Nor image，UIImage对象
 *  @param hImage        高亮 image，UIImage对象
 *  @param clipsToBounds 剪裁，BOOL
 *  @param vcModel       UIViewContentMode
 *
 *  @return UIImageView对象
 */
+ (UIImageView *)createImgWithImage:(UIImage *)image
                             hImage:(UIImage *)hImage
                      clipsToBounds:(BOOL)clipsToBounds
                            vcModel:(UIViewContentMode)vcModel;

/**
 *  创建label对象
 *
 *  @param text          label的text值
 *  @param textColor     label的字体颜色
 *  @param bkColor       label的背景色
 *  @param font          label的字体大小
 *  @param textAlignment label的字体位置
 *
 *  @return UILabel对象
 */
+ (UILabel *)createLabelWithText:(NSString *)text
                       textColor:(UIColor *)textColor
                         bkColor:(UIColor *)bkColor
                            font:(UIFont *)font
                   textAlignment:(NSTextAlignment)textAlignment;

/**
 *  创建自动换行的label对象
 *
 *  @param text          label的text值
 *  @param textColor     label的字体颜色
 *  @param bkColor       label的背景色
 *  @param font          label的字体大小
 *  @param textAlignment label的字体位置
 *
 *  @return UILabel对象
 */
+ (UILabel *)createNewlineLabelWithText:(NSString *)text
                              textColor:(UIColor *)textColor
                                bkColor:(UIColor *)bkColor
                                   font:(UIFont *)font
                          textAlignment:(NSTextAlignment)textAlignment;

/**
 *  创建自适应size的label对象
 *
 *  @param string      text的内容
 *  @param labelHeight label显示的最大高度
 *  @param point       label的位置
 *  @param font        text的字体大小
 *  @param labelWidth  label显示的最大宽度
 *
 *  @return UILabel对象
 */
+ (UILabel *)createAdaptiveLabelWithLengthText:(NSString *)text
                                         point:(CGPoint)point
                                     labelFont:(CGFloat)font
                                    lableWidth:(CGFloat)labelWidth;

/**
 *  自适应label，用于自动布局
 *
 *  @param text                    text
 *  @param textColor               textColor
 *  @param bkColor                 背景色
 *  @param font                    字体大小
 *  @param priority                UILayoutPriority枚举
 *  @param axis                    UILayoutConstraintAxis枚举
 *  @param preferredMaxLayoutWidth 自动布局自适应最大宽度
 *  @param textAlignment           textAlignment
 *
 *  @return 自动布局label
 */
+ (UILabel *)createAdaptiveLabelWithText:(NSString *)text
                               textColor:(UIColor *)textColor
                                 bkColor:(UIColor *)bkColor
                                    font:(UIFont *)font
                                priority:(UILayoutPriority)priority
                                 forAxis:(UILayoutConstraintAxis)axis
                 preferredMaxLayoutWidth:(CGFloat)preferredMaxLayoutWidth
                           textAlignment:(NSTextAlignment)textAlignment;

/**
 *  自适应label，用于自动布局
 *
 *  @param text                    text
 *  @param textColor               textColor
 *  @param bkColor                 背景色
 *  @param font                    字体大小
 *  @param preferredMaxLayoutWidth 自动布局自适应最大宽度
 *  @param textAlignment           textAlignment
 *
 *  @return 自动布局label
 */
+ (UILabel *)createAdaptiveLabelWithText:(NSString *)text
                               textColor:(UIColor *)textColor
                                 bkColor:(UIColor *)bkColor
                                    font:(UIFont *)font
                 preferredMaxLayoutWidth:(CGFloat)preferredMaxLayoutWidth
                           textAlignment:(NSTextAlignment)textAlignment;

/**
 *  创建textView对象
 *
 *  @param borderWidth   线框的线的粗细
 *  @param borderColor   线框颜色
 *  @param textAlignment 文字位置
 *  @param font          文字大小
 *  @param returnKeyType 键盘返回按钮类型，枚举
 *  @param textColor     字体颜色
 *  @param bkColor       textView背景色
 *  @param keyboardType  键盘类型，枚举
 *
 *  @return UITextView对象
 */
+ (UITextView *)createTextViewWithBorderWidth:(CGFloat)borderWidth
                                  borderColor:(UIColor *)borderColor
                                textAlignment:(NSTextAlignment)textAlignment
                                         font:(UIFont *)font
                                returnKeyType:(UIReturnKeyType)returnKeyType
                                    textColor:(UIColor *)textColor
                                      bkColor:(UIColor *)bkColor
                                 keyboardType:(UIKeyboardType)keyboardType;

/**
 *  创建textField对象
 *
 *  @param borderWidth     线框的线的粗细
 *  @param textAlignment   文字位置
 *  @param returnKeyType   键盘返回按钮类型，枚举
 *  @param textColor       文字颜色
 *  @param backgroundColor textField背景色
 *  @param font            字体大小
 *  @param keyboardType    键盘类型
 *
 *  @return UITextView对象
 */
+ (UITextField *)createTextFieldWithBorderWidth:(CGFloat)borderWidth
                                  textAlignment:(NSTextAlignment)textAlignment
                                  returnKeyType:(UIReturnKeyType)returnKeyType
                                      textColor:(UIColor *)textColor
                                backgroundColor:(UIColor *)backgroundColor
                                           font:(UIFont *)font
                                   keyboardType:(UIKeyboardType)keyboardType;


/**
 *  创建view对象
 *
 *  @param bgColor view背景色
 *
 *  @return UIView对象
 */
+ (UIView *)createViewWithBgColor:(UIColor *)bgColor;

/**
 *  创建scrollView对象
 *
 *  @param contentOffset contentOffset(偏移量)
 *  @param contentSize   contentSize(滚动范围)
 *  @param pagingEnabled paginEnabled(是否允许翻页)
 *  @param scrollEnabled scrollEnabled(是否允许滚动)
 *  @param bounces       bounces(是否允许滚动到边界后弹回)
 *  @param delegate      delegate(委托)
 *
 *  @return UIScrollView对象
 */
+ (UIScrollView *)createScrollViewWithContentOffset:(CGPoint)contentOffset
                                    withContentSize:(CGSize)contentSize
                                   canPagingEnabled:(BOOL)pagingEnabled
                                   canScrollEnabled:(BOOL)scrollEnabled
                                         canBounces:(BOOL)bounces
                                           delegate:(id<UIScrollViewDelegate>)delegate;


/**
 *  switch对象
 *
 *  @param isOn 是否打开
 *
 *  @return UISwitch对象
 */
+ (UISwitch *)createSwitchWithIsOn:(BOOL)isOn;

/**
 *  创建tableView对象
 *
 *  @param frame           绝对布局
 *  @param style           类型
 *  @param delegate        delegate委托
 *  @param dataSource      数据源委托
 *  @param clipsToBounds   是否裁剪超出边界的部分
 *  @param scrollEnabled   是否允许滚动
 *  @param hidLine         是否隐藏系统线条
 *  @param tableFooterView footView
 *
 *  @return UITableView对象
 */
+ (UITableView *)createTabelViewForFrame:(CGRect)frame
                                andStyle:(UITableViewStyle)style
                                delegate:(id<UITableViewDelegate>)delegate
                              dataSource:(id<UITableViewDataSource>)dataSource
                        canClipsToBounds:(BOOL)clipsToBounds
                        canScrollEnabled:(BOOL)scrollEnabled
                              isHideLine:(BOOL)hidLine
                       withTableFootView:(UIView *)tableFooterView;

/**
 *  创建collectionView对象
 *
 *  @param frame                          坐标系
 *  @param flowLayout                     布局
 *  @param dataSource                     数据源委托
 *  @param delegate                       delegate委托
 *  @param scrollEnabled                  是否允许滚动
 *  @param showsVerticalScrollIndicator   是否显示垂直方向的滚动条
 *  @param showsHorizontalScrollIndicator 是否显示水平方向的滚动条
 *  @param bounces                        是否允许边界回弹的效果
 *  @param alwaysBounceVertical           是否允许垂直方向总是有回弹
 *
 *  @return UICollectionView对象
 */
+ (UICollectionView *)createCollectionViewForFrame:(CGRect)frame
                          withCollectionViewLayout:(UICollectionViewLayout *)flowLayout
                                        dataSource:(id<UICollectionViewDataSource>)dataSource
                                          delegate:(id<UICollectionViewDelegate>)delegate
                                  canScrollEnabled:(BOOL)scrollEnabled
                      showsVerticalScrollIndicator:(BOOL)showsVerticalScrollIndicator
                    showsHorizontalScrollIndicator:(BOOL)showsHorizontalScrollIndicator
                                           bounces:(BOOL)bounces
                              alwaysBounceVertical:(BOOL)alwaysBounceVertical;

/**
 *  创建flowLayout对象
 *
 *  @param sectionInset            设置其边界偏移
 *  @param minimumLineSpacing      行间距离
 *  @param minimumInteritemSpacing cell间的距离
 *  @param itemSize                设置每个cell的size
 *  @param headerReferenceSize     headerView的size
 *  @param footerReferenceSize     footView的size
 *  @param direction               布局方向
 *
 *  @return UICollectionViewFlowLayout对象
 */
+ (UICollectionViewFlowLayout *)createFlowLayoutForSectionInset:(UIEdgeInsets)sectionInset
                                         withMinimumLineSpacing:(CGFloat)minimumLineSpacing
                                        minimumInteritemSpacing:(CGFloat)minimumInteritemSpacing
                                                       itemSize:(CGSize)itemSize
                                         andHeaderReferenceSize:(CGSize)headerReferenceSize
                                            footerReferenceSize:(CGSize)footerReferenceSize
                                                scrollDirection:(UICollectionViewScrollDirection)direction;

/**
 *  <#Description#>
 *
 *  @param value        <#value description#>
 *  @param minimumValue <#minimumValue description#>
 *  @param maximumValue <#maximumValue description#>
 *
 *  @return <#return value description#>
 */
+ (UISlider *)createSliderWithValue:(CGFloat)value minimumValue:(CGFloat)minimumValue maximumValue:(CGFloat)maximumValue;

@end
